﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Chilis.Marketing.Common;
using System.Data.SqlClient;
using Chilis.Marketing.Business.Entity;
using System.Data;
using System.Globalization;

namespace Chilis.Marketing.Data.Access
{
    public class DACampanha : ConexionBD
    {
        #region ATRIBUTOS

        private SqlCommand cmd;
        ChilisDataContext chilisDataContext = new ChilisDataContext();

        #endregion

        #region CONSTRUCTOR
        #endregion

        #region PROPIEDADES
        #endregion

        #region METODOS

        /// <summary>
        /// Método              : insertarCampanha
        /// Descripción         : Inserta Material en la BD
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa la Campanha</param>
        /// <param name="transaccionIniciada">Indicador de Transaccion Iniciada</param>
        /// <returns>Retorna el Id de la Campanha insertada</returns>
        public int? insertarCampanha(BECampanha campanhaBE,
                                     bool transaccionIniciada)
        {
            int? codInsertado = 0;

            try
            {
                int? tempEstadoCampanha = (int)campanhaBE.EstadoCampanha;
                int? tempEstado = (int)campanhaBE.Estado;
                decimal? tempMetaVenta = (decimal)campanhaBE.MetaVenta;
                decimal? tempPresupuesto = (decimal)campanhaBE.Presupuesto;
                int? tempIdResponsable = null;
                if (campanhaBE.Trabajador != null)
                {
                    tempIdResponsable = campanhaBE.Trabajador.IdTrabajador;
                }
                int? tempIdCreativo = null;
                if (campanhaBE.Creativo != null)
                {
                    tempIdCreativo = campanhaBE.Creativo.IdTrabajador;
                }

                chilisDataContext.spInsertaCampanha(ref codInsertado,
                                                    campanhaBE.Nombre,
                                                    campanhaBE.Descripcion,
                                                    campanhaBE.FechaProyectadaInicio,
                                                    campanhaBE.FechaProyectadaFin,
                                                    tempMetaVenta,
                                                    campanhaBE.MetaUnidades,
                                                    campanhaBE.FechaRealInicio,
                                                    campanhaBE.FechaRealFin,
                                                    tempEstadoCampanha,
                                                    tempPresupuesto,
                                                    tempIdResponsable,
                                                    tempIdCreativo,
                                                    tempEstado,
                                                    campanhaBE.Usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return codInsertado;
        }


        /// <summary>
        /// Método              : modificarCampanha
        /// Descripción         : Modifica Campanha en la BD
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa la Campanha</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarCampanha(BECampanha campanhaBE,
                                      bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstadoCampanha = (int)campanhaBE.EstadoCampanha;
                int? tempEstado = (int)campanhaBE.Estado;
                decimal? tempMetaVenta = (decimal)campanhaBE.MetaVenta;
                decimal? tempPresupuesto = (decimal)campanhaBE.Presupuesto;
                int? tempIdResponsable = null;
                if (campanhaBE.Trabajador != null)
                {
                    tempIdResponsable = campanhaBE.Trabajador.IdTrabajador;
                }
                int? tempIdCreativo = null;
                if (campanhaBE.Creativo != null)
                {
                    tempIdCreativo = campanhaBE.Creativo.IdTrabajador;
                }

                chilisDataContext.spModificaCampanha(campanhaBE.IdCampanha,
                                                     campanhaBE.Nombre,
                                                     campanhaBE.Descripcion,
                                                     campanhaBE.FechaProyectadaInicio,
                                                     campanhaBE.FechaProyectadaFin,
                                                     tempMetaVenta,
                                                     campanhaBE.MetaUnidades,
                                                     campanhaBE.FechaRealInicio,
                                                     campanhaBE.FechaRealFin,
                                                     tempEstadoCampanha,
                                                     tempPresupuesto,
                                                     tempIdResponsable,
                                                     tempIdCreativo,
                                                     tempEstado,
                                                     campanhaBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : eliminarCampanha
        /// Descripción         : Elimina Campanha en la BD
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa la Campanha</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool eliminarCampanha(BECampanha campanhaBE,
                                     bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstado = (int)campanhaBE.Estado;

                chilisDataContext.spEliminaCampanha(campanhaBE.IdCampanha,
                                                    tempEstado,
                                                    campanhaBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }


        /// <summary>
        /// Método              : actualizarEstadoCampanha
        /// Descripción         : Actualiza Estado de la  Campanha en la BD
        /// Fecha Creacion      : 25/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 25/03/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa la Campanha</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool actualizarEstadoCampanha(BECampanha campanhaBE,
                                             bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstadoCampanha = (int)campanhaBE.EstadoCampanha; ;

                chilisDataContext.spActualizaEstadoCampanha(campanhaBE.IdCampanha,
                                                            tempEstadoCampanha,
                                                            campanhaBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : obtenerCampanhaPorId
        /// Descripción         : Obtiene la Entidad Campanha
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="idCampanha">Id Campaña</param>
        /// <returns>Retorna el Objeto que representa la Entidad Campanha</returns>
        public BECampanha obtenerCampanhaPorId(int idCampanha)
        {
            DataSet ds = null;
            BECampanha campanhaBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelCampanhaPorId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdCampanha", idCampanha));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    campanhaBE = this.poblarCampanha(ds.Tables[(int)Constantes.CAMPANHA_DATOS.DATOS_GENERALES], campanhaBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return campanhaBE;
        }

        /// <summary>
        /// Método              : obtenerCampanhaPorActividadId
        /// Descripción         : Obtiene la Entidad Campanha
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="idActividad">Id Actividad</param>
        /// <returns>Retorna el Objeto que representa la Entidad Campanha</returns>
        public BECampanha obtenerCampanhaPorActividadId(int idActividad)
        {
            DataSet ds = null;
            BECampanha campanhaBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelCampanhaPorActividadId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdActividad", idActividad));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    campanhaBE = this.poblarCampanha(ds.Tables[(int)Constantes.CAMPANHA_DATOS.DATOS_GENERALES], campanhaBE);
                    if (campanhaBE != null)
                    {
                        DAActividad actividadDA = new DAActividad();
                        BEActividad actividadBE = null;
                        actividadBE = actividadDA.poblarActividad(ds.Tables[(int)Constantes.CAMPANHA_DATOS.DATOS_ACTIVIDADES], actividadBE);
                        if (actividadBE != null)
                        {
                            campanhaBE.LActividades = new List<BEActividad>();
                            campanhaBE.LActividades.Add(actividadBE);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return campanhaBE;
        }

        /// <summary>
        /// Método              : obtenerCampanhaPorArteId
        /// Descripción         : Obtiene la Entidad Arte
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="idArte">Id Arte</param>
        /// <returns>Retorna el Objeto que representa la Entidad Arte</returns>
        public BECampanha obtenerCampanhaPorArteId(int idArte)
        {
            DataSet ds = null;
            BECampanha campanhaBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelCampanhaPorArteId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdArte", idArte));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    campanhaBE = this.poblarCampanha(ds.Tables[(int)Constantes.CAMPANHA_DATOS.DATOS_GENERALES], campanhaBE);
                    if (campanhaBE != null)
                    {
                        DAArte arteDA = new DAArte();
                        BEArte arteBE = null;
                        arteBE = arteDA.poblarArte(ds.Tables[(int)Constantes.CAMPANHA_DATOS.DATOS_ARTE], arteBE);
                        if (arteBE != null)
                        {
                            campanhaBE.LArtes = new List<BEArte>();
                            campanhaBE.LArtes.Add(arteBE);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return campanhaBE;
        }


        /// <summary>
        /// Método              : obtenerCampanhaPorPruebaPilotoId
        /// Descripción         : Obtiene la Entidad Prueba Piloto
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="idPruebaPiloto">Id Prueba Piloto</param>
        /// <returns>Retorna el Objeto que representa la Entidad Campanha</returns>
        public BECampanha obtenerCampanhaPorPruebaPilotoId(int idPruebaPiloto)
        {
            DataSet ds = null;
            BECampanha campanhaBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelCampanhaPorArteId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdPruebaPiloto", idPruebaPiloto));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    campanhaBE = this.poblarCampanha(ds.Tables[(int)Constantes.CAMPANHA_DATOS.DATOS_GENERALES], campanhaBE);
                    if (campanhaBE != null)
                    {
                        DAPruebaPiloto pruebaPilotoDA = new DAPruebaPiloto();
                        BEPruebaPiloto pruebaPilotoBE = null;
                        pruebaPilotoBE = pruebaPilotoDA.poblarPruebaPiloto(ds.Tables[(int)Constantes.CAMPANHA_DATOS.DATOS_PRUEBA_PILOTO], pruebaPilotoBE);
                        if (pruebaPilotoBE != null)
                        {
                            campanhaBE.LPruebasPiloto = new List<BEPruebaPiloto>();
                            campanhaBE.LPruebasPiloto.Add(pruebaPilotoBE);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return campanhaBE;
        }

        
        /// <summary>
        /// Método              : poblarCampanha
        /// Descripción         : Se encarga de poblar los datos obtenidos en la Entidad Material
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="dtCampanha">Resultado de la Búsqueda por Id</param>
        /// <param name="campanhaBE">Entidad que representa la Campanha</param>
        /// <returns>Retorna el Objeto que representa la Entidad Campanha</returns>
        private BECampanha poblarCampanha(DataTable dtCampanha, BECampanha campanhaBE)
        {
            if (dtCampanha != null && dtCampanha.Rows.Count > 0)
            {
                if (campanhaBE == null)
                {
                    campanhaBE = new BECampanha();
                }
                DataRow drCampanha = dtCampanha.Rows[0];
                if (drCampanha["id_campanha"] != DBNull.Value)
                {
                    int tempIdCampanha = 0;
                    int.TryParse(drCampanha["id_campanha"].ToString(), out tempIdCampanha);
                    campanhaBE.IdCampanha = tempIdCampanha;
                }
                if (drCampanha["nombre"] != DBNull.Value)
                {
                    campanhaBE.Nombre = drCampanha["nombre"].ToString();
                }
                if (drCampanha["descripcion"] != DBNull.Value)
                {
                    campanhaBE.Descripcion = drCampanha["descripcion"].ToString();
                }
                if (drCampanha["fecha_proy_ini"] != DBNull.Value)
                {
                    CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
                    DateTime tempFechaProyIni;
                    DateTime.TryParse(drCampanha["fecha_proy_ini"].ToString(), cultura, System.Globalization.DateTimeStyles.None, out tempFechaProyIni);
                    campanhaBE.FechaProyectadaInicio = tempFechaProyIni;
                }
                if (drCampanha["fecha_proy_fin"] != DBNull.Value)
                {
                    CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
                    DateTime tempFechaProyFin;
                    DateTime.TryParse(drCampanha["fecha_proy_fin"].ToString(), cultura, System.Globalization.DateTimeStyles.None, out tempFechaProyFin);
                    campanhaBE.FechaProyectadaFin = tempFechaProyFin;
                }
                if (drCampanha["meta_venta"] != DBNull.Value)
                {
                    double tempMetaVenta = 0;
                    if (double.TryParse(drCampanha["meta_venta"].ToString(), out tempMetaVenta))
                    {
                        campanhaBE.MetaVenta = tempMetaVenta;
                    }
                }
                if (drCampanha["meta_unidades"] != DBNull.Value)
                {
                    int tempMetaUnidades = 0;
                    int.TryParse(drCampanha["meta_unidades"].ToString(), out tempMetaUnidades);
                    campanhaBE.MetaUnidades = tempMetaUnidades;
                }
                if (drCampanha["fecha_real_ini"] != DBNull.Value)
                {
                    CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
                    DateTime tempFechaRealIni;
                    DateTime.TryParse(drCampanha["fecha_real_ini"].ToString(), cultura, System.Globalization.DateTimeStyles.None, out tempFechaRealIni);
                    campanhaBE.FechaRealInicio = tempFechaRealIni;
                }
                if (drCampanha["fecha_real_fin"] != DBNull.Value)
                {
                    CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
                    DateTime tempFechaRealFin;
                    DateTime.TryParse(drCampanha["fecha_real_fin"].ToString(), cultura, System.Globalization.DateTimeStyles.None, out tempFechaRealFin);
                    campanhaBE.FechaRealFin = tempFechaRealFin;
                }
                if (drCampanha["estado_campanha"] != DBNull.Value)
                {
                    int tempEstadoCampanha = 0;
                    int.TryParse(drCampanha["estado_campanha"].ToString(), out tempEstadoCampanha);
                    if (tempEstadoCampanha > 0)
                    {
                        campanhaBE.EstadoCampanha = Constantes.ObtenerEnumEstadoCampanha(tempEstadoCampanha.ToString());    
                    }
                }
                if (drCampanha["nombre_estado_campanha"] != DBNull.Value)
                {
                    campanhaBE.NombreEstadoCampanha = drCampanha["nombre_estado_campanha"].ToString();
                }
                if (drCampanha["presupuesto"] != DBNull.Value)
                {
                    double tempPrespuesto = 0;
                    if (double.TryParse(drCampanha["presupuesto"].ToString(), out tempPrespuesto))
                    {
                        campanhaBE.Presupuesto = tempPrespuesto;
                    }
                }
                if (drCampanha["fecha_creacion"] != DBNull.Value)
                {
                    CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
                    DateTime tempFechaCreacion;
                    DateTime.TryParse(drCampanha["fecha_creacion"].ToString(), cultura, System.Globalization.DateTimeStyles.None, out tempFechaCreacion);
                    campanhaBE.FechaCreacion = tempFechaCreacion;
                }

                if (drCampanha["id_trabajador"] != DBNull.Value)
                {
                    int tempIdTrabajador = 0;
                    int.TryParse(drCampanha["id_trabajador"].ToString(), out tempIdTrabajador);

                    campanhaBE.Trabajador = new BETrabajador();
                    campanhaBE.Trabajador.IdTrabajador = tempIdTrabajador;

                    if (drCampanha["nombre_trabajador"] != DBNull.Value)
                    {
                        campanhaBE.Trabajador.Nombres = drCampanha["nombre_trabajador"].ToString();
                    }
                    if (drCampanha["ap_paterno_trabajador"] != DBNull.Value)
                    {
                        campanhaBE.Trabajador.ApellidoPaterno = drCampanha["ap_paterno_trabajador"].ToString();
                    }
                    if (drCampanha["ap_materno_trabajador"] != DBNull.Value)
                    {
                        campanhaBE.Trabajador.ApellidoMaterno = drCampanha["ap_materno_trabajador"].ToString();
                    }
                }
                if (drCampanha["id_creativo"] != DBNull.Value)
                {
                    int tempIdCreativo = 0;
                    int.TryParse(drCampanha["id_creativo"].ToString(), out tempIdCreativo);

                    campanhaBE.Creativo = new BETrabajador();
                    campanhaBE.Creativo.IdTrabajador = tempIdCreativo;

                    if (drCampanha["nombre_creativo"] != DBNull.Value)
                    {
                        campanhaBE.Creativo.Nombres = drCampanha["nombre_creativo"].ToString();
                    }
                    if (drCampanha["ap_paterno_creativo"] != DBNull.Value)
                    {
                        campanhaBE.Creativo.ApellidoPaterno = drCampanha["ap_paterno_creativo"].ToString();
                    }
                    if (drCampanha["ap_materno_creativo"] != DBNull.Value)
                    {
                        campanhaBE.Creativo.ApellidoMaterno = drCampanha["ap_materno_creativo"].ToString();
                    }
                }


                if (drCampanha["estado"] != DBNull.Value)
                {
                    int tempEstado = 0;
                    int.TryParse(drCampanha["estado"].ToString(), out tempEstado);
                    campanhaBE.Estado = Constantes.ObtenerEnumEstado(tempEstado.ToString());
                }
            }
            return campanhaBE;
        }


        /// <summary>
        /// Función             : buscarCampanhas
        /// Descripción         : Busca las Campanhas de acuerdo a los filtros configurados
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="filtro">Entidad que representa la Campanha</param>
        /// <returns>Listado de Campañas de acuerdo al filtro especificado</returns>
        public DataTable buscarCampanhas(BECampanha filtro)
        {
            DataTable dt = new DataTable();
            SqlDataAdapter da = null;
            this.Conexion();
            cmd = new SqlCommand();
            cmd.Connection = this.connection;

            this.AbrirConexion();

            cmd.CommandText = "spListarCampanha";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdCampanha", filtro.IdCampanha));
            cmd.Parameters.Add(new SqlParameter("@pNombre", filtro.Nombre));
            cmd.Parameters.Add(new SqlParameter("@pDescripcion", filtro.Descripcion));
            if (filtro.FechaProyectadaInicio.HasValue)
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaProyIni", filtro.FechaProyectadaInicio));
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaProyIni", DBNull.Value));
            }
            if (filtro.FechaProyectadaFin.HasValue)
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaProyFin", filtro.FechaProyectadaFin));
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaProyFin", DBNull.Value));
            }

            cmd.Parameters.Add(new SqlParameter("@pEstadoCampanha", filtro.EstadoCampanha));

            if (filtro.Trabajador != null)
            {
                cmd.Parameters.Add(new SqlParameter("@pIdTrabajador", filtro.Trabajador.IdTrabajador));
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@pIdTrabajador", DBNull.Value));
            }
            if (filtro.FechaCreacionInicio.HasValue)
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaCreacionIni", filtro.FechaCreacionInicio));
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaCreacionIni", DBNull.Value));
            }
            if (filtro.FechaCreacionFin.HasValue)
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaCreacionFin", filtro.FechaCreacionFin));
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@pFechaCreacionFin", DBNull.Value));
            }
            cmd.Parameters.Add(new SqlParameter("@pEstado", filtro.Estado.ToString("D")));
            cmd.Parameters.Add(new SqlParameter("@pOrderBy", filtro.Order_by));
            cmd.Parameters.Add(new SqlParameter("@pDeForma", filtro.De_forma));

            try
            {
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            catch (Exception ex)
            {
                dt = null;
                throw ex;
            }
            finally
            {
                if (da != null)
                {
                    da.Dispose();
                }
                cmd.Dispose();
                this.CerrarConexion();
            }
            return dt;

        }

        /// <summary>
        /// Función             : obtenerActividadesPorIdCampanha
        /// Descripción         : Busca las Actividades de acuerdo a los filtros configurados
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="filtro">Entidad que representa la Actividad</param>
        /// <returns>Listado de Actividades de acuerdo al filtro especificado</returns>
        public DataTable obtenerActividadesPorIdCampanha(int idCampanha)
        {
            DataTable dt = new DataTable();
            SqlDataAdapter da = null;
            this.Conexion();
            cmd = new SqlCommand();
            cmd.Connection = this.connection;

            this.AbrirConexion();

            cmd.CommandText = "spSelActividadPorCampanhaId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdCampanha", idCampanha));

            try
            {
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            catch (Exception ex)
            {
                dt = null;
                throw ex;
            }
            finally
            {
                if (da != null)
                {
                    da.Dispose();
                }
                cmd.Dispose();
                this.CerrarConexion();
            }
            return dt;

        }

        /// <summary>
        /// Función             : obtenerArtesPorIdCampanha
        /// Descripción         : Busca los Artes de acuerdo a los filtros configurados
        /// Fecha Creacion      : 30/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 30/03/2012
        /// </summary>
        /// <param name="filtro">Entidad que representa el Arte</param>
        /// <returns>Listado de Artes de acuerdo al filtro especificado</returns>
        public DataTable obtenerArtesPorIdCampanha(int idCampanha)
        {
            DataTable dt = new DataTable();
            SqlDataAdapter da = null;
            this.Conexion();
            cmd = new SqlCommand();
            cmd.Connection = this.connection;

            this.AbrirConexion();

            cmd.CommandText = "spSelArtePorCampanhaId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdCampanha", idCampanha));

            try
            {
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            catch (Exception ex)
            {
                dt = null;
                throw ex;
            }
            finally
            {
                if (da != null)
                {
                    da.Dispose();
                }
                cmd.Dispose();
                this.CerrarConexion();
            }
            return dt;

        }

        /// <summary>
        /// Función             : obtenerPruebasPilotoPorIdCampanha
        /// Descripción         : Busca las Pruebas Piloto de acuerdo a los filtros configurados
        /// Fecha Creacion      : 01/04/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 01/04/2012
        /// </summary>
        /// <param name="filtro">Entidad que representa la Prueba Piloto</param>
        /// <returns>Listado de Artes de acuerdo al filtro especificado</returns>
        public DataTable obtenerPruebasPilotoPorIdCampanha(int idCampanha)
        {
            DataTable dt = new DataTable();
            SqlDataAdapter da = null;
            this.Conexion();
            cmd = new SqlCommand();
            cmd.Connection = this.connection;

            this.AbrirConexion();

            cmd.CommandText = "spSelPruebaPilotoPorCampanhaId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdCampanha", idCampanha));

            try
            {
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            catch (Exception ex)
            {
                dt = null;
                throw ex;
            }
            finally
            {
                if (da != null)
                {
                    da.Dispose();
                }
                cmd.Dispose();
                this.CerrarConexion();
            }
            return dt;

        }

        #endregion
    }
}
